<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <title>AJ Utils-FileHelper Tutorial</title>
        <meta name="description" content="Small Java utilities with many useful functions. Utility methods for simplifying file system operations" />
        <meta name="keywords" content="AJ Utils, ajaxjs, ajaxjs framework, java utilities, tools, helper, file operations,I/O,Java" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link rel="stylesheet" href="https://framework.ajaxjs.com/static/new-ui/css/common.css" />
        <link rel="stylesheet" href="https://iam.ajaxjs.com/asset/main.css"/>
        <link rel="icon" type="image/x-icon" href="https://framework.ajaxjs.com/aj-logo/logo.ico"/>
        <script src="https://framework.ajaxjs.com/static/aj-docs/common.js"></script>
        <script>
            // 获取用户的默认语言
            var userLang = navigator.language || navigator.userLanguage;

            // 检查是否为中文环境（包括简体和繁体）
            if (userLang.startsWith('zh') && location.pathname.indexOf('cn') == -1) {
                 confirm('欢迎！您可以改为访问中文内容。是否继续？') && location.assign('/cn');  // 如果是中文，则弹出提示
            }

            var _hmt = _hmt || [];
            (function() {
              var hm = document.createElement("script");
              hm.src = "https://hm.baidu.com/hm.js?208c5aea11c52991bd1c3283e62ad0ce";
              var s = document.getElementsByTagName("script")[0];
              s.parentNode.insertBefore(hm, s);
            })();
        </script>
    </head>
    <body>
        <nav>
            <div>
                <div class="links">
                    <a href="/">🏠 Home</a>
                    | ⚙️ Source:
                    <a target="_blank" href="https://github.com/lightweight-component/aj-util">Github</a>/<a target="_blank" href="https://gitcode.com/lightweight-component/aj-util">Gitcode</a>
                    | 🚀 <a href="/cn">Chinese Version</a>
                </div>
                <h1>
                    <img src="https://framework.ajaxjs.com/aj-logo/logo.png" style="vertical-align: middle;height: 45px;margin-bottom: 6px;" />
                    AJ Utils
                </h1>
                <h3>Small Java Utils Library</h3>
            </div>
        </nav>
        <div>
            <menu>
                
                <ul>
                    <li class="selected">
                        <a href="/">Home</a>
                    </li>
                </ul>
                <h3>Common</h3>
                <ul>
                    <li><a href="/common/JsonUtil/">JsonUtil</a></li>
                    <li><a href="/common/BytesHelper/">BytesHelper</a></li>
                    <li><a href="/common/ConvertBasicValue/">ConvertBasicValue</a></li>
                    <li><a href="/common/MessageDigestHelper/">HashHelper</a></li>
                    <li><a href="/common/MapTool/">MapTool</a></li>
                    <li><a href="/common/ObjectHelper/">ObjectHelper</a></li>
                    <li><a href="/common/RandomTools/">RandomTools</a></li>
                    <li><a href="/common/RegExpUtils/">RegExpUtils</a></li>
                    <li><a href="/common/StrUtil/">StrUtil</a></li>
                    <li><a href="/common/BoxLogger/">BoxLogger</a></li>
                    <li><a href="/common/BytesHelper/">BytesHelper</a></li>
                    <li><a href="/common/EncodeTools/">UrlEncode</a></li>
                    <li><a href="/common/XmlHelper/">XmlHelper</a></li>
                    <li><a href="/common/WebUtils/">WebUtils</a></li>
                </ul>
                <h3>Date Handing</h3>
                <ul>
                    <li><a href="/date/intro/">Introduction</a></li>
                    <li><a href="/date/convert/">Date Converter</a></li>
                    <li><a href="/date/formatter/">Date Formatter</a></li>
                </ul>
                <h3>Reflection</h3>
                <ul>
                    <li><a href="/reflect/Methods/">Methods</a></li>
                    <li><a href="/reflect/Types/">Types</a></li>
                    <li><a href="/reflect/Clazz/">Clazz</a></li>
                </ul>

                <h3>IO</h3>
                <ul>
                    <li><a href="/io/FileHelper/">FileHelper</a></li>
                    <li><a href="/io/Resources/">Resources</a></li>
                    <li><a href="/io/StreamHelper/">DataReader/DataWriter</a></li>
                    <li><a href="/io/ZipHelper/">ZipHelper</a></li>
                </ul>

                <h3>HTTP Request</h3>
                <ul>
                    <li><a href="/http_request/Get">HTTP Request</a></li>
                    <li><a href="/http_request/advanced-usage/">Advanced Usage</a></li>
                    <li><a href="/http_request/Base/">Base</a></li>
                </ul>
    
               <h3>Cryptography</h3>
               <ul>
                <li><a href="/cryptography/intro/">Introduction</a></li>
                <li><a href="/cryptography/flow/">Basic Flow</a></li>
                <li><a href="/cryptography/AesCrypto/">AES/DES</a></li>
                <li><a href="/cryptography/RsaCrypto/">RSA</a></li>
               </ul>
            </menu>
            <article class="aj-text">
                <h1>FileHelper Tutorial</h1>
<p>FileHelper is a file operation utility class that provides methods for reading, writing, copying, moving, deleting, and manipulating files and directories. This class uses Java NIO Path and Files API for efficient file operations, and all methods throw UncheckedIOException for IO errors.</p>
<h2>Main Features</h2>
<ol>
<li><strong>Multiple Construction Methods</strong>: Supports creating instances with Path, File, and String paths</li>
<li><strong>File Read/Write Operations</strong>: Supports reading and writing text and byte content</li>
<li><strong>File Management Operations</strong>: Copy, move, delete, and create directories</li>
<li><strong>Directory Operations</strong>: List directory contents, get file sizes</li>
<li><strong>File Chunking</strong>: Supports large file chunking and merging</li>
<li><strong>Chainable Calls</strong>: Supports method chaining</li>
</ol>
<h2>Basic Usage</h2>
<h3>1. Creating Instances</h3>
<pre><code class="language-java">// Create with path string
FileHelper helper1 = new FileHelper(&quot;path/to/file.txt&quot;);

// Create with Path object
Path path = Paths.get(&quot;path/to/file.txt&quot;);
FileHelper helper2 = new FileHelper(path);

// Create with File object
File file = new File(&quot;path/to/file.txt&quot;);
FileHelper helper3 = new FileHelper(file);
</code></pre>
<h3>2. File Reading</h3>
<pre><code class="language-java">// Read file text content
String content = new FileHelper(&quot;example.txt&quot;).getFileContent();

// Read file byte content
byte[] bytes = new FileHelper(&quot;example.txt&quot;).readFileBytes();
</code></pre>
<h3>3. File Writing</h3>
<pre><code class="language-java">// Write string content to file
new FileHelper(&quot;output.txt&quot;).writeFileContent(&quot;Hello World&quot;);
</code></pre>
<h3>4. File Deletion</h3>
<pre><code class="language-java">// Delete file or directory (recursively delete directories)
new FileHelper(&quot;file-or-directory&quot;).delete();
</code></pre>
<h3>5. Directory Operations</h3>
<pre><code class="language-java">// List directory contents
List&lt;String&gt; contents = new FileHelper(&quot;directory&quot;).listDirectoryContents();

// Create directory (supports multi-level directories)
new FileHelper(&quot;new/directory/path&quot;).createDirectory();

// Get file or directory size
long size = new FileHelper(&quot;file-or-directory&quot;).getFileSize();
</code></pre>
<h3>6. File Copying and Moving</h3>
<pre><code class="language-java">// Copy file or directory
new FileHelper(&quot;source.txt&quot;)
    .setTarget(&quot;destination.txt&quot;)
    .copyTo();

// Move file or directory
new FileHelper(&quot;old-location.txt&quot;)
    .setTarget(&quot;new-location.txt&quot;)
    .moveTo();
</code></pre>
<h3>7. File Chunking Operations</h3>
<pre><code class="language-java">// Chunk file (1MB per chunk)
new FileHelper(&quot;large-file.zip&quot;).chunkFile(1024 * 1024);

// Merge chunk files
Path[] chunks = {Paths.get(&quot;file-1&quot;), Paths.get(&quot;file-2&quot;)};
new FileHelper(&quot;merged-file&quot;).mergeFile(chunks);
</code></pre>
<h2>Chainable Call Example</h2>
<pre><code class="language-java">// Chainable call example
new FileHelper(&quot;input.txt&quot;)
    .setTarget(&quot;backup.txt&quot;)
    .copyTo()
    .setTarget(&quot;moved.txt&quot;)
    .moveTo();
</code></pre>
<h2>Exception Handling</h2>
<p>All IO operations throw <code>UncheckedIOException</code> when errors occur, which can be handled with try-catch:</p>
<pre><code class="language-java">try {
    String content = new FileHelper(&quot;nonexistent.txt&quot;).getFileContent();
} catch (UncheckedIOException e) {
    System.err.println(&quot;File operation failed: &quot; + e.getMessage());
}
</code></pre>
<h3>Notes</h3>
<ol>
<li>Target path must be set before copy and move operations</li>
<li>File chunking uses zero-copy technology for improved large file processing efficiency</li>
<li>Directory deletion uses reverse traversal to ensure proper deletion of all subdirectories and files</li>
</ol>

            </article>
        </div>

       <footer>
            AJ-Util, a part of <a href="https://framework.ajaxjs.com" target="_blank">AJ-Framework</a> open source. Mail:
            frank@ajaxjs.com, visit <a href="https://blog.csdn.net/zhangxin09" target="_blank">my blog(In Chinese)</a>.
            <br />
            <br />
            Copyright © 2025 Frank Cheung. All rights reserved.
        </footer>
    </body>
</html>